package main

import (
	"fmt"
	"os"
)

func main() {

	//函数用于将格式化后的字符串输出到标准输出（通常是控制台），
	//并且不会自动在末尾添加换行符。它接受任意数量的参数，
	//并将它们转换为字符串（如果它们不是字符串的话），然后将它们连接起来并输出。
	fmt.Print()

	// fmt.Println 函数与 fmt.Print 类似，但它会在输出的末尾自动添加一个换行符。
	//此外，它还会在每个参数之间添加一个空格，并在最后一个参数之后添加换行符。
	fmt.Println()

	// 函数允许你使用格式化字符串来指定输出的格式。
	// 格式化字符串包含文本和一个或多个格式化动词，
	// 这些动词指示如何格式化后续参数。fmt.Printf 不会自动在末尾添加换行符。
	//%d：十进制整数
	//%s：字符串
	//%f：浮点数
	//%t：布尔值（true 或 false）
	//%v：默认格式（根据参数类型自动选择格式）
	//%T：参数的 Go 类型
	//%%：字面量的百分号字符（%）
	fmt.Printf("Name: %s, Age: %d\n", "Alice", 18)

	// 虽然 fmt.Sprintf 不是直接用于打印的函数，但它也值得一提。
	// fmt.Sprintf 返回一个格式化后的字符串，而不是将其输出到标准输出。这在你需要将格式化后的字符串赋值给变量或进行进一步处理时非常有用。
	result := fmt.Sprintf("Name: %s, Age: %d", "Bob", 24)
	fmt.Println(result)

	// fmt.Fprintf 函数是一个强大的工具，
	//它允许你将格式化的字符串输出到指定的 io.Writer 接口类型的对象。
	//这个接口是一个泛型接口，定义了一个 Write 方法，用于将字节切片写入到底层的数据流中
	file, err := os.Create("output.txt")
	if err != nil {
		fmt.Println("Error creating file:", err)
		return
	}
	defer file.Close()

	_, err = fmt.Fprintf(file, "Name: %s, Age: %d\n", "Alice", 30)
	if err != nil {
		fmt.Println("Error writing to file:", err)
	}
	//

}
